package fileChange

import (
	"github.com/bitly/go-simplejson" // 比官方的库更容易解析json
	"github.com/gorilla/mux"         //路由库"
	"io"
	"io/ioutil"
	"log"
	"net/http"
	"os"
	//"runtime" //打印行数
	"strconv" //字符串转换
)

const (
	MYFIILE = "fileChange_main.go"
)

//===================通用函数================================
//======模块初始化时明确log输出的格式为短文件名和行数============
func init() {
	log.SetFlags(log.Lshortfile | log.LstdFlags)
}

//jsonFileUrl为要测试的json目录，jsonName为名字,如果不存在这个目录，那么将以contextJson初始化
func checkAndInitJson(jsonFileUrl string, jsonName string, contextJson string) {
	//判断jsonFileUrl目录是否存在不存在就递归创建jsonCurrent，存在就什么都不干
	err := os.MkdirAll(jsonFileUrl, 0777)
	if err != nil {
		log.Println(err)
		return
	}

	//判断jsonFileUrl里面有没jsonName
	_, err = os.Stat(jsonFileUrl + "/" + jsonName)
	if err != nil {
		//如果不存在,创建
		fw, err1 := os.Create(jsonFileUrl + "/" + jsonName)
		if err1 != nil {
			log.Println(err1)
			return
		}
		//如果不存在，那写入contextJson
		fw.WriteString(contextJson)
		fw.Close()
	}
}

//===================================================
//put请求在index项目下添加图纸项目
func AddTuzhiFile(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r) //r为*http.Request
	index := vars["index"]
	indexInt, err := strconv.Atoi(index)

	name := vars["name"]                                                //从url获取要删除的name
	json, _ := ioutil.ReadFile("./frontWeb/view/json/projectList.json") //从文件取出数据
	js, err := simplejson.NewJson(json)
	if err != nil {
		log.Println(err)
		return
	}

	//图纸项目列表
	arr := js.GetIndex(indexInt).Get("lists").MustArray()
	newlist := map[string]string{ //新建一个map用来加入到项目列表中
		"listname": name, //内容为新Restful传过来的name
		//"b": "bb",
	}
	newar := append(arr, newlist)
	js.GetIndex(indexInt).Set("lists", newar)
	//修改后转换为二进制
	json1, _ := js.EncodePretty()
	err3 := ioutil.WriteFile("./frontWeb/view/json/projectList.json", json1, 0777) //写入文件(字节数组),q权限方法与linux一样
	if err3 != nil {
		log.Println(err3)
		return
	}
	//ms := js.GetIndex(1).Get("title").MustString()
	//fmt.Println(ms)
	//ms := js.GetIndex(1).Get("title").MustString()
	//fmt.Println(ms)
}

//================上传图纸到特定的页面==================
func UploadTuzhi(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r)          //r为*http.Request
	proname := vars["proname"]   //指上传到哪个项目
	filename := vars["filename"] //上传到哪个文件

	//上传的地址
	uploadurl := "./upload/" + proname + "/" + filename
	jsonFileUrl := uploadurl + "/currentJson" //放置json的文件夹
	jsonName := "current.json"

	//获取文件内容 要这样获取
	log.Println("有请求" + r.RequestURI)
	file, head, err := r.FormFile("file") //file要对应上面的name=“file”
	if err != nil {
		log.Println(err)
		return
	}
	//获取客户端通过GET/POST方式传递的参数
	r.ParseForm()
	author, ok1 := r.Form["author"]         //上传改文件的作者
	uploadTime, ok2 := r.Form["uploadTime"] //上传的时间
	beizhu, ok3 := r.Form["beizhu"]
	//param_password, found2 := r.Form["msg"]
	if !(ok1 && ok2 && ok3) {
		log.Println("不能正常得到上传的form表单")
		return
	}

	defer file.Close()
	//判断upload_path目录是否存在不存在就递归创建，存在就什么都不干
	err = os.MkdirAll(uploadurl, 0777)
	if err != nil {
		log.Println(err)
		return
	}
	log.Println("创建或检查目录存在")

	//创建复制文件
	log.Println("上传文件：" + head.Filename)
	fW, err := os.Create(uploadurl + "/" + head.Filename)
	if err != nil {
		log.Println(err)
		return
	}

	defer fW.Close()
	_, err = io.Copy(fW, file)
	if err != nil {
		log.Println(err)
		return
	}
	//jsonFileUrl为要测试的json目录，jsonName为名字,如果不存在这个目录，那么将以contextJson初始化
	checkAndInitJson(jsonFileUrl, jsonName, "[{\"name\":\"当前已上传的文件\",\"currentlist\":[]}]")

	//=====在这个json目录下添加新加入的图纸名称======
	json, _ := ioutil.ReadFile(jsonFileUrl + "/" + jsonName) //从文件取出数据
	js, err := simplejson.NewJson(json)
	if err != nil {
		log.Println(err)
		return
	}

	//图纸项目列表
	arr := js.GetIndex(0).Get("currentlist").MustArray()
	//这个东西是加到json文件里面的
	newlist := map[string]string{ //新建一个map用来加入到项目列表中
		"tuzhilist":  head.Filename, //内容为新Restful传过来的name
		"author":     author[0],     //上传改文件的作者，在form表单中得到，string【】
		"uploadTime": uploadTime[0],
		"beizhu":     beizhu[0],
		//"b": "bb",
	}
	newar := append(arr, newlist)
	js.GetIndex(0).Set("currentlist", newar)
	//修改后转换为二进制
	json1, _ := js.EncodePretty()
	err3 := ioutil.WriteFile(jsonFileUrl+"/"+jsonName, json1, 0777) //写入文件(字节数组),q权限方法与linux一样
	if err3 != nil {
		log.Println(err3)
		return
	}
	log.Println(head.Filename + "信息写入了" + jsonFileUrl + "/" + jsonName)
	//================================================
	//addjson(uploadurl)
	io.WriteString(w, "hello world!")
}

//将请求的上传的文件的一些信息添加到json里面
/*func addjson(uploadurl string) {
	//判断uploadurl+"/jsonCurrent/"里面有没tuzhilist.json

	//打开json,确保存在tuzhilist.json后
	json, _ := ioutil.ReadFile(uploadurl + "/jsonCurrent/tuzhilist.json") //从文件取出数据
	js, err := simplejson.NewJson(json)

	js.Set("lists", "11111111111")
	//修改后转换为二进制
	json1, _ := js.EncodePretty()
	err = ioutil.WriteFile(uploadurl+"/jsonCurrent"+"/projectList.json", json1, 0777) //写入文件(字节数组),q权限方法与linux一样
	if err != nil {
		log.Println(err)
		return
	}
}*/

//================上传图纸到特定的页面==================
